// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_COMMON_ACCESSIBILITY_MODE_ENUMS_H_
#define CONTENT_COMMON_ACCESSIBILITY_MODE_ENUMS_H_

// Note: keep enums in content/browser/resources/accessibility/accessibility.js
// in sync with these two enums.
enum AccessibilityModeFlag {
    // Native accessibility APIs, specific to each platform, are enabled.
    // When this flag is set that indicates the presence of a third-party
    // client accessing Chrome via accessibility APIs. However, unless one
    // of the flags below is set, the contents of web pages will not be
    // accessible.
    ACCESSIBILITY_MODE_FLAG_NATIVE_APIS = 1 << 0,

    // The renderer process will generate an accessibility tree containing
    // basic information about all nodes, including role, name, value,
    // state, and location. This is the minimum flag required in order for
    // web contents to be accessible, and the remaining flags are meaningless
    // unless this one is set.
    //
    // Note that sometimes this flag will be set when
    // ACCESSIBILITY_MODE_FLAG_NATIVE_APIS is not, when the content layer embedder
    // is providing accessibility support via some other mechanism other than
    // what's implemented in content/browser.
    ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS = 1 << 1,

    // The accessibility tree will contain inline text boxes, which are
    // necessary to expose information about line breaks and word boundaries.
    // Without this flag, you can retrieve the plaintext value of a text field
    // but not the information about how it's broken down into lines.
    //
    // Note that when this flag is off it's still possible to request inline
    // text boxes for a specific node on-demand, asynchronously.
    ACCESSIBILITY_MODE_FLAG_INLINE_TEXT_BOXES = 1 << 2,

    // The accessibility tree will contain extra accessibility
    // attributes typically only needed by screen readers and other
    // assistive technology for blind users. Examples include text style
    // attributes, table cell information, live region properties, range
    // values, and relationship attributes.
    ACCESSIBILITY_MODE_FLAG_SCREEN_READER = 1 << 3,

    // The accessibility tree will contain the HTML tag name and HTML attributes
    // for all accessibility nodes that come from web content.
    ACCESSIBILITY_MODE_FLAG_HTML = 1 << 4,
};

typedef int AccessibilityMode;

const AccessibilityMode AccessibilityModeOff = 0;

const AccessibilityMode ACCESSIBILITY_MODE_COMPLETE = ACCESSIBILITY_MODE_FLAG_NATIVE_APIS | ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS | ACCESSIBILITY_MODE_FLAG_INLINE_TEXT_BOXES | ACCESSIBILITY_MODE_FLAG_SCREEN_READER | ACCESSIBILITY_MODE_FLAG_HTML;

const AccessibilityMode ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY = ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS | ACCESSIBILITY_MODE_FLAG_INLINE_TEXT_BOXES | ACCESSIBILITY_MODE_FLAG_SCREEN_READER | ACCESSIBILITY_MODE_FLAG_HTML;

#endif // CONTENT_COMMON_ACCESSIBILITY_MODE_ENUMS_H_
